package com.hyt.it.ogt.pj.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hyt.core.base.BaseServiceImpl;
import com.hyt.it.ogt.pj.common.ResponseCode;
import com.hyt.it.ogt.pj.mapper.ConfigMapper;
import com.hyt.it.ogt.pj.model.entity.Config;
import com.hyt.it.ogt.pj.service.IConfigService;
import com.hyt.it.ogt.pj.service.ILogService;
import com.hyt.it.ogt.pj.utils.MarkConfigProperties;

/**
 * <p>
 * 评卷参数表 服务实现类
 * </p>
 *
 * @author qiaozj
 * @since 2020-07-09
 */
@Service
public class PjConfigServiceImpl extends BaseServiceImpl<ConfigMapper, Config> implements IConfigService {

    @Autowired
    private MarkConfigProperties properties;

    @Autowired
    private ConfigMapper configMapper;

    @Autowired
    private ILogService logService;

    /**
     * 查询项目评卷参数
     * @param projectId 查询项目评卷参数
     * @return 返回参数列表
     */
    @Override
    public List<Config> findProjectConfigs(String projectId) {
        List<Config> configs = configMapper.findProjectConfigs(projectId);
        return configs;
    }

    /**
     * 根据项目id和参数名称查询某个参数
     * @param projectId 评卷项目id
     * @param label 参数名称
     * @return 返回参数信息
     */
    @Override
    public Config selectByLabel(String projectId, String label) {
        Config config = configMapper.selectByLabel(projectId, label);
        return config;
    }

    /**
     * 初始化评卷参数
     * @param projectId 评卷项目id
     * @return 返回初始化结果状态码
     * @throws Exception 异常
     */
    @Override
    public Integer initMarkParam(String projectId) throws Exception {
        // 查询数据库查看该评卷项目的评卷参数是否已经初始化过
        List<Config> configs = this.findProjectConfigs(projectId);
		if (CollectionUtils.isEmpty(configs)) {
			// 从配置文件中读取评卷参数
			List<Config> newConfigs = new ArrayList<>();
			configs = properties.getConfigs();
			for (Config config : configs) {
				Config con = new Config();
				con.setProjectId(projectId);
				con.setParam(config.getParam());
				con.setValue(config.getValue());
				con.setComment(config.getComment());
				newConfigs.add(con);
			}
			this.saveBatch(newConfigs);
		} else {
			throw new Exception();
		}
        return ResponseCode.SUCCESS;
    }

    /**
     * 根据项目id 删除评卷参数名称,删除时需要判断是否已经开始评卷，若已经开始评卷则不允许删除
     * @param projectId 评卷项目id
     * @return 返回删除状态码
     */
    @Override
    public Integer deleteByProjectId(String projectId) {
        //开始评卷后会有评卷日志，根据是否存在评卷日志判断是否已经开始评卷
        boolean flag = logService.existProjectLog(projectId);
        if(!flag){
            configMapper.deleteByProjectId(projectId);
            return ResponseCode.SUCCESS;
        }else{
            return ResponseCode.LOG_DELETE_ERROR_BEGIN_MARK;
        }
    }
}
